//package com.sunye.rocketmq;
//
//import com.google.gson.Gson;
//import com.google.gson.GsonBuilder;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.rocketmq.client.producer.TransactionSendResult;
//import org.apache.rocketmq.spring.core.RocketMQTemplate;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.messaging.Message;
//import org.springframework.messaging.support.MessageBuilder;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.util.Random;
//
//@Slf4j
//@RestController
//@RequestMapping("/api")
//public class OrderController {
//
//    @Autowired
//    private RocketMQTemplate rocketMQTemplate;
//
//
//    /***
//     * 使用RocketMQTemplate发送事务消息和普通消息略有不同的是，
//     * 需要指一个事务生产者组，当然如果传入null，则会使用默认值
//     * rocketmq_transaction_default_global_name，
//     * 发生消息的地址和普通消息一样都Topic:Tag，
//     * 另外一点不同的是除了发生的Message之外，
//     * 还可以发送其他的额外参数，不过这些参数
//     * 只会在执行本地事务的时候会用到。
//     *
//     * @return
//     */
//    @GetMapping("/sendOrder")
//    public String sendOrder() {
//
//        //数据封装
//        String orderId = (new Random().nextInt(1000)) +"";
//        OrderEntity entity = new OrderEntity();
//        entity.setId(Long.valueOf(orderId));
//        entity.setAge(12);
//        entity.setName("张三");
//
//        //使用Gson将实体转化成字符串
//        GsonBuilder gsonBuilder = new GsonBuilder();
//        gsonBuilder.setPrettyPrinting();
//        Gson gson = gsonBuilder.create();
//        String mm = gson.toJson(entity);
//
//        //消息封装
//        MessageBuilder<String> stringMessageBuilder = MessageBuilder.withPayload(mm);
//        stringMessageBuilder.setHeader("msg",mm);
//        Message msg = stringMessageBuilder.build();
//
//        log.info(">>>> send tx message start,tx_group={},destination={},payload={} <<<<","my-producer-group","order_topic",entity);
//
//        String destination = "order_topic" + ":" + "buy";
//        // 发送半消息，sendMessageInTransaction方法，以前的版本是4个参数，最新的版本中只有3个参数了
//        TransactionSendResult sendResult = rocketMQTemplate.sendMessageInTransaction(destination,msg,entity.getId().toString());
//        // 发送半消息的返回结果
//        String sendStatus = sendResult.getSendStatus().name();
//        String localTXState = sendResult.getLocalTransactionState().name();
//        log.info(">>>> send status={},localTransactionState={} <<<<",sendStatus,localTXState);
//        return "success";
//
//
//    }
//}
//
//
